// 位置字符主要有两个字符

// ^匹配字符串开始的位置 就像是一个帽子，就匹配开头
// test必须出现在开始位置
/^test/.test('test123') // true
console.log(/^test/.test('test123'));
console.log(/^test/.test('atest123'));

// $匹配字符串的结束位置，就是一个美元符号，表示最后一定得拿点钱走，就是最后
// test必须出现在结束位置
/test$/.test('new test') // true
console.log(/test$/.test('new test'));
console.log(/test$/.test('new test2'));

// 如果同时使用这两个字符，就表示必须以他开头还得以他结尾，就是一个精准匹配
// 从开始位置到结束位置只有test
/^test$/.test('test'); // true
console.log(/^test$/.test('test'));
/^test$ /.test('test test') // false
console.log(/^test$ /.test('test test'));


// | 选择符号，一条竖线，表示的是或的关系
/11|22/.test('911'); // true
// 多个选择符号也是可以连用的
/fred|barney|betty/;

// 转义符 \ 正则表达式中那些有特殊含义的元字符，如果要匹配它们本身，
// 就需要在它们前面要加上反斜杠。比如要匹配+，就要写成\+
// 正则表达式中，需要反斜杠转义的，一共有12个字符：^ . [ $ ( ) | * + ? {和\

//  [ ] 可选匹配
// 表示有一系列字符可供选择，只要匹配其中一个就可以了。
// 所有可供选择的字符都放在方括号内，比如[xyz] 表示x、y、z之中任选一个匹配
/[abc]/.test('hello world'); // false
/[abc]/.test('apple'); // true

// 脱字符 ^
// 如果方括号内的第一个字符是[^]，则表示除了字符类之中的字符，其他字符都可以匹配
// 这个时候他就不是匹配字符串的开头了
// 比如，[^xyz]表示除了x、y、z之外都可以匹配
/[^abc]/.test('bbc news'); // true
/[^abc]/.test('bbc'); // false
// 如果方括号内没有其他字符，即只有[^]，就表示匹配一切字符，其中包括换行符
// 相比之下，点号作为元字符（.）是不包括换行符的
var s = 'Please yes\nmake my day!';

s.match(/yes.*day/); // null
s.match(/yes[^]*day/); // [ 'yes\nmake my day']

// - 连字符 对于连续序列的字符，连字符（-）用来提供简写形式，表示字符的连续范围
// 比如，[abc]可以写成[a-c]，[0123456789]可以写成[0-9]，同理[A-Z]表示26个大写字母
/a-z/.test('b'); // false
/[a-z]/.test('b'); // true